﻿using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Entidades;
using System.Linq;
using System.Data.Entity.Infrastructure;

namespace PruebasUnitarias
{
    [TestClass]
    public class UsuarioTest
    {
        static Usuario usuario;
        static Organizador context;

        [ClassInitialize]
        public static void Inicializacion(TestContext testContext)
        {
            usuario = new Usuario()
            {
                Nombre = "usuario1",
                Contrasena = "usuario1"
            };
            context = new Organizador();
            context.Usuarios.Add(usuario);
            context.SaveChanges();
        }

        [TestMethod]
        public void GetUsuarioTest()
        {
            Usuario usuarioObtenido = Usuario.GetUsuario(usuario.Nombre, usuario.Contrasena);
            Assert.AreEqual(usuario.Nombre, usuarioObtenido.Nombre);
            Assert.AreEqual(usuario.Contrasena, usuarioObtenido.Contrasena);

        }

        [TestMethod]
        public void AñadirUsuarioDuplicado()
        {
            Usuario usuario2 = null;
            try
            {
                usuario2 = new Usuario
                {
                    Nombre = usuario.Nombre,
                    Contrasena = usuario.Contrasena
                };
                context.Usuarios.Add(usuario2);
                context.SaveChanges();
                Assert.Fail("Se ha duplicado un usuario");
            }
            catch (DbUpdateException e)
            {
                foreach (DbEntityEntry en in e.Entries)
                {
                    if(en.Entity != usuario2 )
                    {
                        throw e;
                    }
                }
            }
            catch (Exception e)
            {
                throw e;
            }
        }

    }
}
